iT邦幫忙

0

桌遊Dobble程式碼

  • 分享至 

  • xImage
  •  

桌遊說明
https://blog.duduzui.com/2013/06/dobble.html

規則設計:任意兩張牌都必有且僅有一種相同符號

該桌遊共有55張卡牌、每張卡牌有8種圖案
與現行程式碼不符,再想想

其他整理方向:
將產生排組、洗亂花色、洗牌分開
刪去第一輪、直接以第二輪的邏輯產製全部
寫test

程式碼如下


function newDobble(num) {
  let pic = 0;
  let dobble = new Array(num);
  // let picNum=countPicNumber(num-1);
  for (i = 0; i < num; i++) {
    dobble[i] = new Array();
  }
  //第一輪
  //從第一張牌開始跟下一張牌給予相同的花色
  //直到倒數第二張牌結束
  for (i = 0; i < num - 1; i++) {
    dobble[Math.floor(i % num)].push(i);
    dobble[Math.floor((i + 1) % num)].push(i);
    pic++;
    //每一次分配完就花色+1
  }
  // console.log('第一輪');
  // console.log(dobble);
  // console.log('第一輪pic:'+pic);
  //第二輪
  remained = num - 2;
  //第一張牌剩下總數-自身-次張還沒配對
  //下一張牌開始每次扣除前次已配對的部分,所以逐次減一
  for (j = 0; j < num - 2; j++) {
    //從第一張牌開始比對除了下一張牌以外的牌
    //分別給予相同的花色
    //次張在第一輪分配過了,所以從+2那一張開始
    //remained表示要逐次分配的次數,故每次減一
    for (k = j; k < j + remained; k++) {
      dobble[j].push(pic);
      dobble[k + 2].push(pic);
      pic++;
    }
    remained--;
  }
  return dobble;
  //   // console.log('第二輪');
  // for(i=0;i<num;i++){
  // console.log(dobble[i]);
  // }
  // console.log('卡片總數:'+num);
  // console.log('花色總數:'+pic);
}//function
function countPicNumber(num) {
  if (num == 1)
    return 1
  else
    return (num + countPicNumber(num - 1))
}
function randomPics(arrOfArr) {//打亂花色的排序
  for (m = 0; m < arrOfArr.length; m++) {
    for (i = 0; i < arrOfArr[m].length; i++) {
    j = Math.floor((Math.random() * arrOfArr[m].length));
    k = Math.floor((Math.random() * arrOfArr[m].length));
      temp=arrOfArr[m][j];
      arrOfArr[m][j] = arrOfArr[m][k];
      arrOfArr[m][k]=temp;
    }
  }
}
function randomCards(num) {//打亂牌的排序
  dobble = newDobble(num);
  for (i = 0; i < num; i++) {
    j = Math.floor((Math.random() * num));
    k = Math.floor((Math.random() * num));
    // console.log(j+','+k);
    temp=dobble[j]
    dobble[j] = dobble[k];
    dobble[k]=temp
  }
  randomPics(dobble);

  for (i = 0; i < num; i++) {
    console.log(dobble[i]);
  }
  console.log('卡片總數:' + num);
}

console.log();
randomCards(5);
randomCards(6);
randomCards(7);
//比對單一陣列中是否有重複值
//比對陣列之間是否必有重複值
//比對陣列之間的重複值是否為唯一

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言